package com.itany.corejava.code08_常用类.内部类;

/**
 * @author MissChen
 * @version 1.0
 * @date 2023 年11月17日 10:24
 */
public class Test02_局部内部类 {
    public static void main(String[] args) {
        MyOuter myOuter=new MyOuter();
        myOuter.show();
    }
}
class MyOuter{
    private String name="aaa";
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    public void show(){
        System.out.println("=========这是一个外部类的普通方法开始========");
        String gender="女";
        gender="男";
        //局部内部类:在外部类的方法中定义的一个类
        class MyInner{
            private String name="baby";
            private String tel="123567778";

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }

            public String getTel() {
                return tel;
            }

            public void setTel(String tel) {
                this.tel = tel;
            }
            private  void test(){
                System.out.println("----这是局部内部类的中私有方法-----");
            }
            public void print(){
                System.out.println("------这是局部内部类的public修饰的方法-------");



                System.out.println(age);

                //当内部类与外部类存在同名的时候，默认访问的是内部类的属性
                // 如果需要访问外部类的属性:外部类.this.属性名
                System.out.println(name);
                System.out.println(MyOuter.this.name);


                //在局部内部类中只能访问该方法中用final修饰的属性(JDK8之前)
                // JDK8开始，内部类所在的方法中属性默认被final修饰，因此省略了final
                // gender="男";//报错
                // System.out.println(gender);//如果内部类想要访问该方法中的变量，该变量默认被final修饰，不要重新赋值，一旦重新赋值，此时就不再是finak修饰，内部类访问就会报错
                System.out.println(tel);
            }
        }
        System.out.println("=========这是一个外部类的普通方法标记========");
        MyInner inner=new MyInner();
        inner.print();
        inner.test();
    }

}